package br.com.imob.modelo;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

/**
 *
 * @author Gilton Nascimento
 */
@Entity
@Table(name = "\"CONSTRUTORA\"", catalog = "imob", schema = "public", uniqueConstraints = {
    @UniqueConstraint(columnNames = {"construtora_id"})})
@NamedQueries({
    @NamedQuery(name = "Construtora.findAll", query = "SELECT c FROM Construtora c"),
    
    @NamedQuery(name = "Construtora.findByFantasia", query = "SELECT e FROM Construtora e WHERE e.fantasia = :fantasia"),
    @NamedQuery(name = "Construtora.findLikeByFantasia", query = "SELECT e FROM Construtora e WHERE e.fantasia Like :fantasia"),
    
    @NamedQuery(name = "Construtora.findByRazaoSocial", query = "SELECT e FROM Construtora e WHERE e.razaoSocial = :razaoSocial"),
    @NamedQuery(name = "Construtora.findLikeByRazaoSocial", query = "SELECT e FROM Construtora e WHERE e.razaoSocial Like :razaoSocial"),
    
    @NamedQuery(name = "Construtora.findByConstrutoraId", query = "SELECT c FROM Construtora c WHERE c.construtoraId = :construtoraId")})
    
public class Construtora extends ControlEntities implements Serializable {
	
    private static final long serialVersionUID = 1L;
    
    @Id
//  <editor-fold defaultstate="collapsed" desc="Geradores de Sequencias">
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_STORE")
    @SequenceGenerator(name = "SEQ_STORE", sequenceName = "next_construtora")// </editor-fold>
    @Basic(optional = false)
    @Column(name = "construtora_id", nullable = false)
    private Integer construtoraId;
    
    @Column(name = "con_fantasia", length = 2147483647)
    private String fantasia;
    
    @Column(name = "con_razao_social", length = 2147483647)
    private String razaoSocial;
    
    @OneToMany(mappedBy = "construtora", fetch = FetchType.LAZY)
    private List<Empresa> empresaList;
    
    @JoinColumn(name = "pessoa_id", referencedColumnName = "pessoa_id")
    @ManyToOne(fetch = FetchType.LAZY)
    private Pessoa pessoa;
    
    @JoinColumn(name = "obra_id", referencedColumnName = "obra_id")
    @ManyToOne(fetch = FetchType.LAZY)
    private Obra obra;
    
    @JoinColumn(name = "endereco_id", referencedColumnName = "endereco_id")
    @ManyToOne(fetch = FetchType.LAZY)
    private Endereco endereco;
    
    @JoinColumn(name = "contato_id", referencedColumnName = "contato_id")
    @ManyToOne(fetch = FetchType.LAZY)
    private Contato contato;

    public Construtora() {}
    public Construtora(Integer construtoraId) { this.construtoraId = construtoraId; }
//    public Construtora(String tpStr, String arg) {
//    	if( "fantasia".equalsIgnoreCase(tpStr) )
//    		fantasia = arg;
//    	if( "razao socail".equalsIgnoreCase(tpStr) )
//    		razaoSocial = arg;
//    }
    public Construtora(String fantasy, String rsocial) {
    	fantasia = fantasy;
    	razaoSocial = rsocial;
    }
    public Construtora( int id, String fantasy, String rsocial ) {
    	this(fantasy, rsocial);
    	construtoraId = id;
    }
    
	//    Getts and Setts
    public Integer getConstrutoraId() {
        return construtoraId;
    }

    public void setConstrutoraId(Integer construtoraId) {
        this.construtoraId = construtoraId;
    }

    public List<Empresa> getEmpresaList() {
        return empresaList;
    }

    public void setEmpresaList(List<Empresa> empresaList) {
        this.empresaList = empresaList;
    }

    public Pessoa getPessoa() {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    public Obra getObra() {
        return obra;
    }

    public void setObra(Obra obra) {
        this.obra = obra;
    }

    public Endereco getEndereco() {
        return endereco;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    public Contato getContato() {
        return contato;
    }

    public void setContato(Contato contato) {
        this.contato = contato;
    }

    public void setFantasia(String conFantasia) {
		this.fantasia = conFantasia;
	}
	public String getFantasia() {
		return fantasia;
	}
	
	public void setRazaoSocial(String conRazaoSocial) {
		this.razaoSocial = conRazaoSocial;
	}
	
	public String getRazaoSocial() {
		return razaoSocial;
	}
	
	public Object[] getValues() {
		Object[] values = { construtoraId, fantasia, razaoSocial };
		return values;
	}
	
	@Override
    public int hashCode() {
        int hash = 0;
        hash += (construtoraId != null ? construtoraId.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        if (!(object instanceof Construtora)) {
            return false;
        }
        Construtora other = (Construtora) object;
        if ((this.construtoraId == null && other.construtoraId != null) || (this.construtoraId != null && !this.construtoraId.equals(other.construtoraId))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.imob.modelo.Construtora[construtoraId=" + construtoraId + "]";
    }

}
